The present invention relates to the field of computer graphics, and in particular to methods and apparatus for creating, modifying, and using components to create computer graphics productions. Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time. A great deal of effort has been devoted to making realistic looking and artistically compelling rendered images and animations.
Computer graphics images, animations, and other productions involving computer graphics, such as interactive entertainment software, are created from a number of different components. Generally, components include any data and instructions used to create products and applications that include computer graphics. Components can include three-dimensional models of geometry; texture maps, other arrays of data, lighting, and shading programs used to determine the visual appearance of models; and animation data and deformer functions used to specify changes and motion over time. One or more components are typically stored as a digital asset.
Components typically include one or more attributes containing data associated with the component. Attributes can specify any static or varying property of a component. For example, a component may be a model of a sphere. Attributes of this example component could describe properties such as the radius of the sphere and the location of the center of the sphere. Different types of components may include different numbers and types of attributes. Components are often related to each other with complex cross-reference, inheritance, and dependency relationships.
Digital production pipelines previously stored its digital assets in data files. Some systems arrange data files in a complex hierarchical file system. Other systems use databases to store the location of data files and metadata summarizing the contents of data files.
Managing the large number of inter-related data files is a complex task. In a computer graphics system using a file system hierarchy, any errors in the placement of a data file or the specification of a file path may result in erroneous output. Because of the complex relationships between components, the source of the erroneous output and the appropriate correction may not obvious to users. Additionally, if a small change is made to a digital asset, prior data file-based systems often must rewrite the entire digital asset data file.
Furthermore, it is difficult to search for and/or selectively modify digital assets matching specific criteria. Even systems that store digital asset metadata in databases are limited in their search capabilities, because the metadata only summarizes the contents of digital assets. Users and applications normally cannot use any arbitrary attribute or characteristic of a digital asset as a search criteria unless metadata has already been generated for this attribute or characteristic. If metadata for an attribute or characteristic does not exist, the only alternative is to load each data file into the appropriate application, parse all of the data in the data file to instantiate all of the components in the data file in memory, and then search the instantiated components for the desired attribute. For digital productions with large numbers of enormous data files, this process can take hours or days, which makes it impractical for most uses.
Therefore, there is an unmet need for a system and method to improve the ease, efficiency, and reliability of the creation, modification, and management of components and digital assets in digital production pipelines. There is also an unmet need for a system and method to search and/or modify components based on arbitrarily complex and specific criteria. There is also an unmet need for database systems, database methods, and database structures to enable unrestricted and progressive modifications, refinements, and variations of any type of data by one or more users or applications, such as in a collaborative environment.